﻿
/* 
 * 1.EXEMPLO PARA CRIAR UM THUMBNAIL DE UMA IMAGEM : 
 *  
 *  1.1.INSTANCIAR A CLASSE
 *          Imagem img = new Imagem();
 *  1.2.CRIAR UM NOVO BITMAP COM A IMAGEM ORIGINAL E CHAMAR O METODO "resizeImage" PASSANDO NO VALOR SIZE O TAMANHO DO THUMBNAIL         
 *          Bitmap b = new Bitmap("C:\\Users\\mauricion\\Desktop\\Exemplo\\freeteste.jpg");
 *          Image i = img.resizeImage(b, new Size(100, 100));
 *  1.3.CHAMAR O METODO "saveJpeg" PASSANDO O NOME ESCOLHIDO PARA A IMAGEM , PASSAR A IMAGEM RETORNADA PELO METODO "resizeImage", 
 *  _PASSAR A QUALIDADE DA IMAGEM (USUAL PASSAR 100 QUANDO É THUMBNAIL).
 *          img.saveJpeg("C:\\Users\\mauricion\\Desktop\\Exemplo\\freetestenovothumb.jpg",(Bitmap)i,100);
 *
 *  1.4. CODIGO COMPLETO
 *      Imagem img = new Imagem();
 *      Bitmap b = new Bitmap("C:\\Users\\mauricion\\Desktop\\Exemplo\\freeteste.jpg");
 *      Image i = img.resizeImage(b, new Size(100, 100));
 *      img.saveJpeg("C:\\Users\\mauricion\\Desktop\\Exemplo\\freetestenovothumb.jpg",(Bitmap)i,100);
 *      
 * 
 *  2.EXEMPLO PARA REDUZIR TAMANHO EM KBYTES/QUALIDADE DE UMA IMAGEM (SAVE FOR WEB)
 *   
 *   2.1. INSTANCIAR A CLASSE
 *          Imagem img = new Imagem();
 *   2.2. CRIAR UM NOVO BITMAP COM A IMAGEM ORIGINAL 
 *          Bitmap b = new Bitmap("C:\\Users\\mauricion\\Desktop\\Exemplo\\freeteste.jpg");
 *   2.3. CHAMAR O METODO "savejpeg" PASSANDO O NOME DA NOVA IMAGEM QUE IRA SER CRIADA , PASSAR O BITMAP CRIADO ANTERIORMENTE E _
 *   _PASSAR A QUALIDADE QUE A IMAGEM DEVE SER SALVA
 *          img.saveJpeg("C:\\Users\\mauricion\\Desktop\\Exemplo\\freetestenovothumb.jpg",b,100);
 *   
 *   2.4. CODIGO COMPLETO
 *      Imagem img = new Imagem();
 *      Bitmap b = new Bitmap("C:\\Users\\mauricion\\Desktop\\Exemplo\\freeteste.jpg");
 *      img.saveJpeg("C:\\Users\\mauricion\\Desktop\\Exemplo\\freetestenovo.jpg",(Bitmap)i,100);
 *       
 */


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Drawing.Drawing2D; 

namespace imagem
{
    public sealed class Imagem
    {

       public void saveJpeg(string path, Bitmap img, long quality)
        {
            // Encoder parameter for image quality
            EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
            // Jpeg image codec
            ImageCodecInfo jpegCodec = this.getEncoderInfo("image/jpeg");
            if (jpegCodec == null)
                return;
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;
            Bitmap b = new Bitmap(img);
            b.Save(path, jpegCodec, encoderParams);
        }

       private ImageCodecInfo getEncoderInfo(string mimeType)
        {
            // Get image codecs for all image formats
            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            // Find the correct image codec
            for (int i = 0; i < codecs.Length; i++)
                if (codecs[i].MimeType == mimeType)
                    return codecs[i];
            return null;
        }

       public Image resizeImage(Image imgToResize, Size size)
        {
            int sourceWidth = imgToResize.Width;
            int sourceHeight = imgToResize.Height;

            float nPercent = 0;
            float nPercentW = 0;
            float nPercentH = 0;

            nPercentW = ((float)size.Width / (float)sourceWidth);
            nPercentH = ((float)size.Height / (float)sourceHeight);

            if (nPercentH < nPercentW)
                nPercent = nPercentH;
            else
                nPercent = nPercentW;

            int destWidth = (int)(sourceWidth * nPercent);
            int destHeight = (int)(sourceHeight * nPercent);

            Bitmap b = new Bitmap(destWidth, destHeight);
            Graphics g = Graphics.FromImage((Image)b);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
            g.Dispose();

            return (Image)b;
        }

       public static string RenameImage(string original)
       {
           original = original.ToLower();
           original = original.Replace(' ', '_');
           original = original.Replace('á', 'a');
           original = original.Replace('ã', 'a');
           original = original.Replace('à', 'a');
           original = original.Replace('é', 'e');
           original = original.Replace('è', 'e');
           original = original.Replace('ê', 'e');
           original = original.Replace('í', 'i');
           original = original.Replace('ì', 'i');
           original = original.Replace('î', 'i');
           original = original.Replace('ó', 'o');
           original = original.Replace('ô', 'o');
           original = original.Replace('ò', 'o');
           original = original.Replace('õ', 'i');
           original = original.Replace('ú', 'u');
           original = original.Replace('ù', 'u');
           original = original.Replace('ñ', 'n');
           return original;

       }

    }
}
